#!/bin/bash

# 系统清理脚本 - 解决PID文件混乱和进程残留问题

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 获取脚本所在目录
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

echo "=========================================="
echo "    财务管理系统清理脚本"
echo "=========================================="

# 清理所有PID文件
cleanup_pid_files() {
    log_info "清理PID文件..."
    
    # 显示当前PID文件
    if ls "$SCRIPT_DIR"/.*.pid 1> /dev/null 2>&1; then
        echo "发现的PID文件："
        ls -la "$SCRIPT_DIR"/.*.pid
        
        # 删除所有PID文件
        rm -f "$SCRIPT_DIR"/.*.pid
        log_success "所有PID文件已清理"
    else
        log_info "没有发现PID文件"
    fi
}

# 强制停止所有相关进程
force_stop_processes() {
    log_info "强制停止所有相关进程..."
    
    # 停止8000端口的进程
    BACKEND_PIDS=$(lsof -ti :8000 2>/dev/null || true)
    if [ ! -z "$BACKEND_PIDS" ]; then
        log_warning "强制停止后端进程: $BACKEND_PIDS"
        echo $BACKEND_PIDS | xargs kill -9 2>/dev/null || true
    fi
    
    # 停止3000端口的进程
    FRONTEND_PIDS=$(lsof -ti :3000 2>/dev/null || true)
    if [ ! -z "$FRONTEND_PIDS" ]; then
        log_warning "强制停止前端进程: $FRONTEND_PIDS"
        echo $FRONTEND_PIDS | xargs kill -9 2>/dev/null || true
    fi
    
    # 停止可能的Django进程
    DJANGO_PIDS=$(ps aux | grep "manage.py runserver" | grep -v grep | awk '{print $2}' || true)
    if [ ! -z "$DJANGO_PIDS" ]; then
        log_warning "强制停止Django进程: $DJANGO_PIDS"
        echo $DJANGO_PIDS | xargs kill -9 2>/dev/null || true
    fi
    
    # 停止可能的npm进程
    NPM_PIDS=$(ps aux | grep "npm start" | grep -v grep | awk '{print $2}' || true)
    if [ ! -z "$NPM_PIDS" ]; then
        log_warning "强制停止npm进程: $NPM_PIDS"
        echo $NPM_PIDS | xargs kill -9 2>/dev/null || true
    fi
    
    log_success "进程清理完成"
}

# 清理日志文件（可选）
cleanup_logs() {
    if [ "$1" = "--clean-logs" ]; then
        log_info "清理日志文件..."
        rm -f "$SCRIPT_DIR/backend.log"
        rm -f "$SCRIPT_DIR/frontend.log"
        log_success "日志文件已清理"
    fi
}

# 检查端口状态
check_ports() {
    log_info "检查端口状态..."
    
    if lsof -i :8000 > /dev/null 2>&1; then
        log_warning "端口8000仍被占用："
        lsof -i :8000
    else
        log_success "端口8000已释放"
    fi
    
    if lsof -i :3000 > /dev/null 2>&1; then
        log_warning "端口3000仍被占用："
        lsof -i :3000
    else
        log_success "端口3000已释放"
    fi
}

# 主执行流程
main() {
    cleanup_pid_files
    force_stop_processes
    
    # 等待进程完全停止
    sleep 2
    
    check_ports
    cleanup_logs $1
    
    echo
    echo "=========================================="
    log_success "系统清理完成！"
    echo "=========================================="
    echo "现在可以安全地重新启动系统："
    echo "  ./restart_optimized.sh  (推荐，快速重启)"
    echo "  ./restart.sh            (原版重启)"
    echo "  ./start.sh              (仅启动)"
    echo "=========================================="
    
    if [ "$1" != "--clean-logs" ]; then
        echo "提示: 使用 './cleanup.sh --clean-logs' 可同时清理日志文件"
    fi
}

# 执行主函数
main $1